Log-contrast regression with compositional predictor variables.
lc.reg(y, x, z = NULL, xnew = NULL, znew = NULL)
A numerical vector containing the response variable values. This must be a continuous variable.
A matrix with the predictor variables, the compositional data. No zero values are allowed.
A matrix, data.frame, factor or a vector with some other covariate(s).
A matrix containing the new compositional data whose response is to be predicted. If you have no new data, leave this NULL as is by default.
A matrix, data.frame, factor or a vector with the values of some other covariate(s). If you have no new data, leave this NULL as is by default.
A list including:
The constrained regression coefficients. Their sum equals 0.
If covariance matrix of the constrained regression coefficients.
The estimated regression variance.
The vector of residuals.
If the arguments "xnew" and znew were given these are the predicted or estimated values, otherwise it is NULL.
The function performs the log-contrast regression model as described in Aitchison (2003), pg. 84-85.
The logarithm of the compositional predictor variables is used (hence no zero values are allowed).
The response variable is linked to the log-transformed data with the constraint that the sum of the
regression coefficients equals 0. Hence, we apply constrained least squares, which has a closed form
solution. The constrained least squares is described in Chapter 8.2 of Hansen (2019). The idea is to
minimise the sum of squares of the residuals under the constraint \(R^T \beta = c\), where \(c=0\)
in our case. If you want the regression without the zum-to-zero contraints see ulc.reg
.
Extra predictors variables are allowed as well, for instance categorical or continuous.
Aitchison J. (1986). The statistical analysis of compositional data. Chapman & Hall.
Hansen, B. E. (2019). Econometrics. https://www.ssc.wisc.edu/~bhansen/econometrics/Econometrics.pdf
# NOT RUN {
y <- iris[, 1]
x <- as.matrix(iris[, 2:4])
x <- x / rowSums(x)
mod1 <- lc.reg(y, x)
mod2 <- lc.reg(y, x, z = iris[, 5])
# }
Run the code above in your browser using DataLab